package controllers;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Hashtable;
import javax.swing.JOptionPane;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import model.Account;
import model.Bank;
import model.Person;
import model.SavingAccount;
import model.SpendingAccount;
import utilities.IllegalProcedureException;
import utilities.InsufficientMoney;
import view.BankView;
public class BankController {
private BankView bankView;
private Bank bank;
public BankController(BankView bankView, Bank bank) {
this.bank = bank;
this.bankView = bankView;
bankView.fillTablePersons(bank.getBankData());
bankView.fillTableAccounts(bank.getBankData());
this.bankView.addAddPersonButtonListener(new AddPersonButtonListener());
this.bankView.addRemovePersonButtonListener(new RemovePersonButtonListener());
this.bankView.addAddAccountButtonListener(new AddAccountButtonListener());
this.bankView.addRemoveAccountButtonListener(new RemoveAccountButtonListener());
this.bankView.addWithdrawButtonListener(new WithdrawButtonListener());
this.bankView.addDepositButtonListener(new DepositButtonListener());
this.bankView.addGenerateStatementButtonListener(new GenerateStatementButtonListener());
this.bankView.addTablePersonsActionListener(new TablePersonsActionListener());
this.bankView.addTablePersonsActionListener(new TableAccountsActionListener());
}
class AddPersonButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
Person person = new Person(bankView.getFirstName(), bankView.getLastName(), bankView.getSsid(),
bankView.getPhoneNo());
try {
bank.addPerson(person);
} catch (IllegalProcedureException e) {
e.printStackTrace();
}
bank = bank.writeAccountsData();
bankView.fillTablePersons(bank.getBankData());
}
}
class RemovePersonButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
if (bankView.getPersonsTable().getSelectedRow() != -1) {
Person person = new Person(
bankView.getModelPersons().getValueAt(bankView.getPersonsTable().getSelectedRow(), 2)
.toString(),
bankView.getModelPersons().getValueAt(bankView.getPersonsTable().getSelectedRow(), 1)
.toString(),
bankView.getModelPersons().getValueAt(bankView.getPersonsTable().getSelectedRow(), 0)
.toString(),
bankView.getModelPersons().getValueAt(bankView.getPersonsTable().getSelectedRow(), 3)
.toString());
try {
bank.removePerson(bank.getPersonBySsid(bankView.getModelPersons()
.getValueAt(bankView.getPersonsTable().getSelectedRow(), 0).toString()));
bank = bank.writeAccountsData();
System.out.println("REMOVE" + bank.toString());
bankView.getModelPersons().removeRow(bankView.getPersonsTable().getSelectedRow());
} catch (IllegalProcedureException e) {
e.printStackTrace();
}
bankView.fillTablePersons(bank.getBankData());
}
}
}
class AddAccountButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
if (bankView.getPersonsTable().getSelectedRow() != -1) {
if (bankView.getSavingRadioButton().isSelected()) {
Person person = bank.getPersonBySsid(bankView.getModelPersons()
.getValueAt(bankView.getPersonsTable().getSelectedRow(), 0).toString());
Account account = new SavingAccount(bankView.getBalance());
try {
bank.addAccount(person, account);
} catch (IllegalProcedureException e) {
e.printStackTrace();
}
} else if (bankView.getSpendingRadioButton().isSelected()) {
Person person = bank.getPersonBySsid(bankView.getModelPersons()
.getValueAt(bankView.getPersonsTable().getSelectedRow(), 0).toString());
Account account = new SpendingAccount(bankView.getBalance());
try {
bank.addAccount(person, account);
} catch (IllegalProcedureException e) {
e.printStackTrace();
}
}
bank = bank.writeAccountsData();
bankView.fillTableAccounts(bank.getBankData());
}
}
}
class RemoveAccountButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
if (bankView.getAccountsTable().getSelectedRow() != -1) {
String accNo = bankView.getModelAccounts().getValueAt(bankView.getAccountsTable().getSelectedRow(), 0)
.toString();
Account account = bank.getAccountByNr(accNo);
Person person = bank.getPersonByAccount(accNo);
try {
bank.removeAccount(person, account);
} catch (IllegalProcedureException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
bank = bank.writeAccountsData();
bankView.fillTableAccounts(bank.getBankData());
}
}
}
class WithdrawButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
if (bankView.getAccountsTable().getSelectedRow() != -1) {
String accNo = bankView.getModelAccounts().getValueAt(bankView.getAccountsTable().getSelectedRow(), 0)
.toString();
Account account = bank.getAccountByNr(accNo);
try {
account.withdraw(bankView.getAmount());
} catch (InsufficientMoney e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
bank.readAccountsData();
bank = bank.writeAccountsData();
bankView.fillTableAccounts(bank.getBankData());
}
}
}
class DepositButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
if (bankView.getAccountsTable().getSelectedRow() != -1) {
String accNo = bankView.getModelAccounts().getValueAt(bankView.getAccountsTable().getSelectedRow(), 0)
.toString();
Account account = bank.getAccountByNr(accNo);
account.deposit(bankView.getAmount());
bank.readAccountsData();
bank = bank.writeAccountsData();
bankView.fillTableAccounts(bank.getBankData());
}
}
}
class GenerateStatementButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
bank.generateStatement();
}
}
class TablePersonsActionListener implements TableModelListener {
@Override
public void tableChanged(TableModelEvent e) {
// TODO Auto-generated method stub
}
}
class TableAccountsActionListener implements TableModelListener {
@Override
public void tableChanged(TableModelEvent e) {
// TODO Auto-generated method stub
}
}
}